GPT1: Improving Language Understanding by Generative Pre-Training - 论文精读学习笔记

Cook 2024.08.23

You are what you eat.
And I'm cooking what I eat!  
:)

More food...🍜

目录

提前说明:本系列博文主要是对参考博文的解读与重述(对重点信息进行标记、或者整段摘录加深自己的记忆和理解、融合多个博文的精髓、统合不同的代表性的案例),仅做学习记录笔记使用。与君共享,希望一同进步。

 

预备知识

全文梗概

ChatGPT的初代工作,可以说没有GPT,就没有现在的大模型百家争鸣,关注并思考作者是如何根据前者的工作在思想上进行创新,从而得到通用的模型架构。

GPT通过无监督预训练监督微调,探索了一种用于语言理解任务的半监督学习/训练方法。目标是学习通用的表示,可以迁移到任何任务。展示了在自然语言理解任务上的强大性能,特别是在NLU、QA和语义相似性任务上。该模型使用Transformer解码器,通过预训练捕获语言结构,然后针对特定任务进行微调。这一方法为后来的BERT等模型奠定了基础,推动了NLP领域的发展。

本文主要探讨了利用生成式预训练方法提高语言理解能力的问题。

本文主要介绍了GPT1模型(利用Transformer架构),该模型通过无监督的生成式(Generative)预训练(Pre-Training)和有监督的微调(Fine-Tuning)提升语言理解能力。得到了适应多种NLP下游任务的模型。

适用于文本分类、相似度分析等NLP任务。GPT1展示了生成预训练的有效性,成为后续大语言模型如GPT2、GPT3和ChatGPT的基石。

核心思想 先在大规模的无标注文本上预训练一个语言模型,然后在每个具体任务上进行判别式微调,同时利用任务相关的输入变换来实现有效的迁移学习。

训练方法 该论文采用了半监督的训练方式,即通过无监督学习进行预训练,再通过监督学习进行微调。在评估了RNN网络Transformer网络之后,作者发现后者可以很好地捕捉较长的语言结构,从而使得模型在处理子任务时具有更好的泛化性。这种方法为模型的训练带来了很好的效果。

训练思路 论文提出了一个新的训练思路:基于海量无标注语料进行通用的生成式预训练,然后针对下游任务使用有标注的数据进行微调。这算是一个两阶段的半监督训练方法,先后融合了无监督的预训练和有监督的微调

意思是:作者对比了RNN和Transformer,选择了Transformer!

主要做法 使用Transformer的解码部分 + 把结构化的文本输入变成序列,预训练 + task-discriminative fine-tuning解决自然语言理解问题。

介绍

数据集

自然语言理解任务包括哪些:

现在的问题:虽然大量未标注的文本语料库非常丰富,但用于学习这些特定任务的标注数据却非常稀少,这使得经过鉴别训练的模型难以充分发挥作用。

文章在包括文本分类、文本相似度分析、问答和知识推理四个任务的数据集上进行了数值实验。

结果表明,生成式预训练在9/12个数据集上取得了State-of-the-art(SOTA)水平。

问题 如何利用无标注的大量数据!

文章贡献:文章证明,通过在各种未标注文本语料库上对语言模型进行生成式预训练(Generative Pre-Training),然后在每个特定任务上进行判别式微调(Discriminative Fine-Tuning),可以在这些任务上取得巨大的收益。

文章提出的GPT训练方式是当前LLM的一种主流训练方式。

提出了一种基于生成式预训练的语言理解模型,该模型可以在各种自然语言处理任务上取得显著的性能提升。

特别之处:与以往的方法不同,我们在微调过程中利用任务感知输入转换来实现有效的转移,同时只需对模型架构做最小的改动。

不是很明白,上一句这个是啥意思~~

结论:。我们在各种自然语言理解基准上证明了我们方法的有效性。在所研究的 12 项任务中,我们的通用任务无关模型在 9 项任务中的表现明显优于使用专为每项任务设计的架构的判别训练模型。

 

利用未标注文本数据的难点:

  1. 不清楚什么样的预训练有助于文本的迁移学习;

  2. 如何将学习到的表示转移到下游任务。

 

相关工作

用于 NLP 的半监督学习 | Semi-supervised learning for NLP 我们的工作大致属于自然语言半监督学习的范畴。这一范式已引起了极大的兴趣,并被应用于序列标注 [24, 33, 57] 或文本分类 [41, 70] 等任务中。最早的方法是使用未标注的数据来计算词级或短语级统计数据,然后将其作为有监督模型的特征[33]。在过去几年中,研究人员已经证明了使用词嵌入[11, 39, 42]的好处,这种方法是在无标签语料库中训练出来的,可以提高各种任务的性能[8, 11, 26, 45]。不过,这些方法主要传递的是词层面的信息,而我们的目标是捕捉更高层次的语义。

最近的一些方法研究了从未标明的数据中学习和利用词级语义以外的语义的方法。短语级或句子级嵌入可以使用未标记的语料库进行训练,已被用于将文本编码为适合各种目标任务的向量表示[28, 32, 1, 36, 22, 12, 56, 31]。

发展过程:

1 使用未标注的数据来计算词级或短语级统计数据,然后将其作为有监督模型的特征。

2 使用词嵌入:在无标签语料库中训练出来的,可以提高各种任务的性能。

目标:(12 都是传递的是词层面的信息) → (为了捕捉更高层次的语义3

3 从未标明的数据中学习和利用词级语义以外的语义的方法 —— 短语级或句子级嵌入:可以使用未标记的语料库进行训练,已被用于将文本编码为适合各种目标任务的向量表示

无监督预训练 | Unsupervised pre-training 无监督预训练是半监督学习的一种特殊情况其目标是找到一个好的初始化点,而不是修改监督学习目标。

与我们的工作最接近的是使用语言建模目标对神经网络进行预训练,然后在目标任务的监督下对其进行微调。Dai 等人 [13] 以及 Howard 和 Ruder [21] 采用这种方法来改进文本分类。

本文特色 不过,虽然预训练阶段有助于捕捉一些语言信息,但他们使用的 LSTM 模型将其预测能力限制在较短的范围内。相比之下,我们选择的变压器网络可以捕捉到更长距离的语言结构,这在我们的实验中得到了证明。

此外,我们还在自然语言推理转述检测故事补全等更广泛的任务中证明了我们模型的有效性。其他方法 [43, 44, 38] 使用预先训练好的语言或机器翻译模型中的隐藏表征作为辅助特征,同时在目标任务上训练监督模型。这就需要为每个单独的目标任务设置大量新参数,而我们在传输过程中只需对模型架构做最小的改动。

辅助训练目标 | Auxiliary training objectives 添加辅助无监督训练目标是半监督学习的另一种形式。Collobert 和 Weston [10] 的早期研究使用了 POS 标记分块命名实体识别语言建模等多种辅助 NLP 任务来改进语义角色标记。最近,Rei [50] 在他们的目标任务目标中添加了一个辅助语言建模目标,并在序列标注任务中证明了性能的提高。我们的实验也使用了辅助目标,但正如我们所展示的,无监督预训练已经学习了与目标任务相关的几个语言方面。

 

框架

训练(半监督的训练方式)程序包括2个阶段:

  1. 预训练阶段:在大型文本语料库中学习高容量语言模型 —— 在无监督数据上进行预训练

    在海量文本上训练,无需label,根据前k-1个词预测到第k个单词是什么,第一阶段的训练让模型拥有了更多的先验知识,模型具有非常强的泛化性。

  2. 微调阶段:将模型调整为使用标注数据的判别任务 —— 再在特定任务的监督数据上进行微调

    在特定任务(有label的数据集)上fine-tuning,让模型能适应不同的任务,提高模型在特定任务上的准确性。

    具体来说就是替换掉第一阶段的最后一层,在监督数据集上训练。

 

本文模型采用Transformer的解码器,迁移过程采用特定于任务的自回归方法,该方法将结构化文本处理为连续的token序列在不改变模型架构的情况下进行微调。

 

3.1 无监督学习下的预训练(Unsupervised pre-training)

如何利用无监督学习进行预训练:

  • 在这个过程中,GPT模型通过预测一段文本的后续内容来学习语言的结构和语义信息。

文章提出了通过生成式预训练来学习语言结构,即,通过前面的token预测当前的token,结构化表示如下公式:

给定未标注的语料序列 U={u1,,un}(也就是一句话),采用标准的语言模型最大化下列目标:

(1)L1(U)=ilogP(ui|uik,,ui1;Θ)

其中,u1 可以表示为单个字符,U 可以表示为一个包含许多字符的字符串,根据前 k 个词来预测下一个词 ui 的概率 P(ui|uik,,ui1) ,然后最大化下一个token的似然函数目标)来进行训练。

给定一组token的输入,通过多头自回归注意力机制实现下一个token的预测。

模型整体工作介绍 此外,模型仅使用了Transformer的解码器(Decoder)进行预训练。预测过程涉及将 n 个词进行词嵌入(Word Embedding),然后加上位置嵌入(Position Embedding)。接下来文本序列通过多层Transformer块进行处理,并在最后一层Transformer块后进行最后一次投影。最后,经由softmax操作,输出文本中每个词的概率分布。

通俗来说,上面的式子就是:希望模型生成的句子尽量靠近当前句子。

神经网络采用多层Transformer解码架构,相比于传统Transformer采用sin函数进行位置编码,这里通过模型学习到位置嵌入(position embedding)。其他部分于Transformer解码部分基本一致。

image-20240823161525671

注意 对于生成来说,跟原始Transformer论文不同的是,这里只用到了Transformer decoder,并在decoder中去掉了前一encoder的输入的multi-head attention部分。

本文的模型是多层Transformer解码器堆叠的模型,该模型对输入带有位置编码的上下文应用多头注意力机制,输出目标token的分布:

(2)h0=UWe+Wphl=transformer_block(hl1)i[1,n]P(u)=softmax(hnWeT)

其中, U=(uk,,u1)是标记(token)的上下文向量, n 是层数, We 是词(token)嵌入矩阵, Wp 是位置(position)嵌入矩阵。

3.2 监督学习下的微调 (Supervised fine-tuning)

如何将预训练好的GPT模型应用于语言理解任务中(包括文本分类、命名实体识别等任务):

→ 在这个过程中,GPT模型通过将输入文本转换为向量表示,然后利用已学习的语言结构和语义信息进行分类或实体识别等任务。

得到预训练模型之后,我们将模型在有标签的数据集 C 上进行微调,每个样本包含token序列 x1,,xm ,相应的标注标签为 y ,将它们输入到预训练模型中进行微调。形式化表达:给定 (x=(x1,,xm),y)C) ,其中 x,y 分别表示输入句子和对应的标注。

首先将序列 x 输入到模型中,得到输出 hlmhlm 表示最后一层Transformer块的输出,Wy 表示最后一层输出层的参数),再增加一个线性层和 softmax 得到输出概率 P(y|x),即预测标签,从而模型的最大似然为 L2(C)

(3)P(y|x1,,xm)=softmax(hlmWy)

需要最大化的目标为:

(4)L2(C)=(x,y)logP(y|x1,,xm)

博文5 需要注意的是fine-tuning中也要考虑模型的通用性,所以增加了一个辅助学习目标(Auxiliary Learning Objective),这里对应的是预训练模型的 L1(C),即,公式(1)。

此外,作者还发现,将语言建模作为微调的辅助目标有利于提升模型的泛化性并加速学习(提高监督模型的泛化 + 加速收敛),即,作者没有只将L2 作为微调阶段的目标函数,而是采用 L3 这样的方式,将预训练模型的目标函数加权求和。具体如下(最终模型学习的目标函数):

(5)L3(C)=L2(C)+λL1(C)

其中,λ 表示预训练的权重。

Notes 以上损失函数是针对微调任务生效的,而不是说每次都要重新训练大模型。

启发
还可以将目标函数进行加权求和呢!

3.3 特定任务的输入转换(Task-specific input transformations)

文章整体架构

image-20240822174030132

图1:(左)本工作中使用的Transformer架构和训练目标。(右)用于对不同任务进行微调的输入转换。我们将所有结构化输入转换为token序列,由我们的预训练模型处理,然后跟上一个线性层和softmax层。

上图展示了如何将模型应用到特定问题下。核心包括2个过程:

  1. 对输入的token序列进行预处理,根据任务加入特殊的token构造可以处理的有序序列;

  2. 对输出部分构建一个线性层,将Transformer的输出映射到对应的标签或者词表上。

上图展示了文中说明的四种特定任务,通过添加的线性层(Linear),也是上文说的 Wy 参数,并且不修改Transformer的结构来进行微调。

下游任务的输入格式统一方便迁移的时候不用变动太大

下游任务的输入格式不统一的话,对于不同NLP下游任务进行迁移学习通常都要在网络中增加新的任务相关的模块为了达到Transformer网络格式针对不同NLP下游任务不变的目标,这里对不同的NLP下游任务输入格式进行了统一处理。

不同微调任务的输入

image-20240823095524518

img

ref. 博文8

针对不同的微调任务,文章采用了traversal-style方法,即,将所有输入转化为一个有序的句子(Start标志句子开始,Extract标志句子结束),从而模型可以直接处理。具体的不同任务的处理方式如上图。

Textual entailment

对于文本蕴含任务,将前提和假设连接到一起,中间用分隔符分割。

Similarity

对于相似性任务,序列的排序没有关联,因此对两种排序都进行了独立建模,将最后一层的输出相加喂入MLP。

Question Answering and Commonsense Reasoning

对于问题回答和常识推理任务,给定上下文内容和问题,以及一组回答,将上下文与问题和每个回答相连接,两两之间都需要特殊的分隔符,最后将所有组合的输出结果通过softmax层标准化,得到答案的分布。

 

实验

4.1 实验设置

无监督预训练

作者采用BooksCorpus数据集训练语言模型。

模型规范
微调细节

...

4.2 监督微调

image-20240822180335272

本文进行实验的NLP任务。

自然语言推理(Natural Language Inference)

image-20240822180727740

自然语言推理任务的结果,GPT在五个数据集中的四个上显著优于基线,但是在RTE上低于多任务biLSTM,可能的原因是本文的模型没进行多任务上训练。

问题回答和常识推理

image-20240822180835410

在问答和常识推理上,GPT显著高于其他模型,证明模型有效处理远程上下文的能力。

语义相似性(Semantic Similarity)

image-20240822183832428

语义相似性涉及预测两个句子在语义上是否等效。作者使用3个数据集进行评估,在其中2个上达到了最先进的结果。

分类(Classification)

最后评估了分类任务,在SST-2和CoLA上都具有竞争力的结果。

分析

层的影响(Impact of number of layers transferred)

作者观察了模型层数预训练知识迁移到下游任务的影响。

image-20240822182105946

上图左边展示了模型层数对MultiNLI和RACE任务的性能变化。观察到每增加一层会提升9%的性能,说明预训练模型中每一层都包含用于解决目标任务的知识。

上图右边可视化了启发式解决方案在生成预训练模型过程中的有效性。作者希望更好理解为什么预训练是有效的。一个假设是底层的生成模型通过执行多任务预训练提高了语言建模能力,并且注意力机制有利于迁移。观察到模型性能随着预训练的更新稳定增加,表明预训练支持学习各种任务相关功能。

消融实验

消融实验的作用:通过消融实验等手段验证GPT模型中各个组成部分的作用和有效性。

image-20240822182339016

消融实验结果见上表,观察到:

如何应用GPT模型

博文9指出:

实际上,利用GPT模型进行自然语言处理任务并不需要深厚的专业知识。通过调用GPT模型提供的API接口,我们可以轻松地实现文本生成、问答、文本分类等任务。此外,我们还可以根据自己的需求对GPT模型进行微调(fine-tuning),以适应特定领域和场景的需求。

总结

本文设计了GPT,通过预训练微调,实现了强大的自然语言理解能力。本文的工作证明,实现显著的性能提升是可能的。

文章提出了一种生成式预训练+微调的语言训练方法,更有效地捕获到语言模型结构。

作者希望有助于对自然语言理解和其他领域的无监督学习进行新的研究,进一步提高我们对无监督学习如何以及何时发挥作用的理解

本文的研究成果为自然语言处理领域的发展提供了一个新的思路和方法。

【博文2】的总结

本文(GPT)是NLP大模型时代的经典基石文章。

正是GPT的提出,才有了BERT,才有了chatGPT,才有了现在NLP大模型领域的百家争鸣。

虽然GPT本质上是Transformer的解码器的堆叠,但是它创新性提出了预训练微调的学习范式,为之后的大模型发展奠定了基础。

说到GPT,就不得不提到BERT,从引用量来说,BERT远超过GPT,但是不代表BERT就优于GPT,虽然从实验结果上BERT优于GPT,但是细读BERT可以发现,BERT许多地方都借鉴了GPT,包括预训练微调的范式,所以BERT虽然让预训练+微调的方式出圈了,但是真正的贡献还是来自于GPT。当然,正是因为BERT的出现,让GPT意识到自己的不足,即解码器和编码器架构本身的不同,正式架构的不同,才让二者的预训练任务不同,所需要的训练数据规模和模型规模也就不同,因此GPT的后续工作才会在更大规模的数据集上预训练,在模型层数上下功夫。

【博文3】提及的BERT & GPT

BERTGPT是当下最受欢迎的两种预训练模型。

二者均采用Transformer架构。

 BERTGPT
Transformer架构采用双向Transformer架构(解码部分)采用单向Transformer架构(编码部分)
预训练方式采用的是掩码预测方式采用的是生成式预训练
即,通过前面的token预测当前token。
这也间接要求GPT采用单向Transformer架构

【博文4】的思考

1 为什么GPT模型的网络结果必须采用解码器 —— 自回归性质

GPT预训练模型仅仅只采用transformer的解码器(decoder),是源于解码器中的第一层多头注意力(Multi-Head Attention)采用了掩码(Masked)的操作,具体操作类似于输入图像只裁剪中间信息,将部分像素通过与掩码矩阵相乘进行消除,使得输出时只能获取未被掩码掉的部分,而论文中采用该方法,将k作为上下文窗口,涂抹掉信息来预测下一个词。这种掩码操作被称为自回归性质,它可以确保模型在生成序列时遵循语言的线性顺序,而不会出现随意跳跃或重复生成的情况。这样,通过大量的文本数据来预训练该模型,可以使其学习到自然语言中的语法结构、词汇等知识。

2 为什么GPT的位置嵌入没有使用Transformer的位置编码

GPT的位置嵌入并没有使用原transformer的正弦函数(sinusoidal)的方式求得。其中transformer提出的方式见如下公式。经过查阅,发现Bert也不是采用transformer的正弦函数,可能自学习的位置嵌入更加贴合数据集,并且目前的单一输入文本长度也不会过长,但在将来越来越大的数据集下,这种可以扩展到无限长度的方式本身具有的泛化性可能会更加有优势。

(6)PE(pos,2i)=sin(pos/100002i/d)PE(pos,2i+1)=cos(pos/100002i/d)

结论

GPT这篇论文奠定了ChatGPT的基础,GPT2论文和GPT3论文主要是对预训练方式的改进和不断地增大模型的参数。

Instruct GPT提出的RLHF,就是基于人类反馈(Human Feedback)对语言模型进行强化学习(Reinforcement Learning),人工训练出一个符合人类行为或反馈的奖励模型,然后利用PPO算法进行语言模型的微调,即以强化学习方式依据人类反馈优化语言模型,自此ChatGPT才得以从量的累积到质的改变,并且这也是ChatGPT能很好避开违法犯罪、种族歧视等话题的一种最为有效的手段。

这篇论文为我们揭示了GPT模型如何通过生成式预训练提升语言理解能力的奥秘。

 

原文目录

1 Introduction 1 2 Related Work 2 3 Framework 3 Unsupervised pre-training 3 Supervised fine-tuning 3 Task-specific input transformations 4 4 Experiments 4 Setup 4 Supervised fine-tuning 5 5 Analysis 7 6 Conclusion 8

 

参考博文

  1. 【论文阅读】Improving language understanding by generative pre-training

    点评:应该是全文的翻译,没有重点或者思考可以汲取,所以没看完

  2. 【NLP经典论文精读】Improving Language Understanding by Generative Pre-Training

    点评:有自己的思考,还有一些引申,很不错

  3. 论文笔记--Improving Language Understanding by Generative Pre-Training

    点评:简短、但比较精准,比博文2更详细、准确些

  4. GPT的前身:Improving Language Understanding by Generative Pre-Training 论文阅读

    点评:简短且有自己的思考,不错的博文

  5. GPT1(Improving Language Understanding by Generative Pre-Training)论文阅读 Google

    点评:写的不错,需要外网才能看。引文值得再看看

  6. GPT之《Improving Language Understanding by Generative Pre-Training》: 预训练的力量

    点评:博文提供了一些预备知识,我觉得不错

  7. GPT1论文笔记(Improving Language Understanding by Generative Pre-Training)

    点评:一点点内容,但是能帮助我从更高的层次理解文章

  8. GPT-1论文《Improving Language Understanding by Generative Pre-Training》解读

    点评:博文提供的总结图很赞,我给摘录了过来,鼓励大家看原文👆

  9. LLMs之GPT:《Improving Language Understanding by Generative Pre-Training》的精髓解读

    点评:特别解释了“生成式预训练”的一些概念和内容,帮助我又加深了一些理解

 

博文免责声明

  1. 本条博文信息主要整合自网络,部分内容为自己的理解写出来的,如有断章截句导致不正确或因个人水平有限未能详尽正确描述的地方,敬请各位读者指正;

  2. 引用出处可能没有完全追溯到原始来源,如因此冒犯到原创作者,请联系本人更正/删除;

  3. 博文的发布主要用于自我学习,其次希望帮助到有共同疑惑的朋友。

欢迎随时联系讨论,一起成长进步。